<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
             /*
      字符串常用方法
        + 通用语法: 字符串.方法名()
        + 注意: 所有的字符串常用方法都会不改变原始字符串, 而是以返回值形式给出结果
        //如果结果是字符串  也是一个新的字符串 

      1. charAt()
        + 语法: 字符串.charAt(索引)
        + 返回值: 该索引位置的字符
          => 如果没有该索引位置, 返回的是 空字符串

      2. charCodeAt()
        + 语法: 字符串.charCodeAt(索引)
        + 返回值: 该索引位置字符的 unicode 编码
          => 如果没有该索引位置, 返回的是 NaN

      3. toUpperCase()
        + 语法: 字符串.toUpperCase()
        + 返回值: 将原始字符串内的所有字母转换成大写

      4. toLowerCase()
        + 语法: 字符串.toLowerCase()
        + 返回值: 将原始字符串内的所有字母转换成小写

      5. substr()  // splice(开始的索引,多少个)
        + 语法: 字符串.substr(开始索引, 多少个)
        + 返回值: 截取出来的部分字符串

      6. substring()
        + 语法: 字符串.substring(开始索引, 结束索引)  // slice()
        + 特点: 包前不包后
        + 返回值: 截取出来的部分字符串


      7. slice()
        + 语法: 字符串.slice(开始索引, 结束索引)
        + 特点: 包前不包后, 填写负整数
        + 返回值: 截取出来的部分字符串

      8. split()
        + 语法: 字符串.split('分隔符')
        + 返回值: 是一个数组
          => 按照分隔符把字符串分开成为几段内容

      9. concat()
        + 语法: 字符串.concat(字符串1, 字符串2, ...)
        + 返回值: 拼接好的字符串

      10. indexOf()
        + 语法: 字符串.indexOf(查找的字符, 开始索引)
        + 返回值:
          => 如果原始字符串内有该字符串片段, 那么是该字符串片段第一次出现的首字母索引位置
          => 如果原始字符串内没有该字符串片段, 那么是 -1

      11. lastIndexOf()
        + 语法: 字符串.lastIndexOf(字符串片段, 开始索引)
        + 返回值:
          => 如果原始字符串内有该字符串片段, 那么是该字符串片段第一次出现的首字母索引位置
          => 如果原始字符串内没有该字符串片段, 那么是 -1

      12. includes()
        + 语法: 字符串.includes(字符串片段)
        + 作用: 该字符串中是否包含该字符串片段
        + 返回值: 一个布尔值
          => true 说明有该字符串片段
          => false 说明没有该字符串片段

      13. startsWith()
        + 语法: 字符串.startsWith(字符串片段)
        + 作用: 判断该字符串是否以该字符串片段开头
        + 返回值: 一个布尔值
          => true 说明以该字符串片段开头
          => false 说明不以该字符串片段开头

      14. endsWith()
        + 语法: 字符串.endsWith(字符串片段)
        + 作用: 判断该字符串是否以该字符串片段结尾
        + 返回值: 一个布尔值
          => true 说明以该字符串片段结尾
          => false 说明不以该字符串片段结尾

      15. trim()
        + 语法: 字符串.trim()
        + 作用: 去除字符串首尾空白
        + 返回值: 去除首尾空白后的字符串

      16. trimStart() / trimLeft()
        + 语法:
          => 字符串.trimStart()
          => 字符串.trimLeft()
        + 返回值: 去除开始位置空白以后的字符串

      17. trimEnd() / trimRight()
        + 语法:
          => 字符串.trimEnd()
          => 字符串.trimRight()
        + 返回值: 去除结束位置空白以后的字符串

      18. replace()
        + 语法: 字符串.replace(换下字符, 换上字符)
        + 作用: 替换原始字符串内的片段
        + 注意: 只能替换一个
        + 返回值: 替换好的字符串

        
    */
    


    var str1 = 'js is so good';
    document.write('原始字符串',str1,'<br >');

    // charAt

    // var res = str1.charAt(3)// 参数是索引
    // document.write(res)
 
    // var res = str1.charCodeAt(3)// 参数是索引
    // document.write(res) // i 的unicode编码  a 97   i 105

    // toUpperCase 
    // var res = str1.toUpperCase()
    // document.write(res)

    // toLowerCase
    // var str1 = 'JS IS SO GOOD';
    // var res = str1.toLowerCase();
    // document.write(res);

    // substr
    // var res = str1.substr(9,4);  // good 从9开始截取4个
    // document.write(res);


//    var res = str1.substring(9,13);  // good 从9开始到下标13 不包含13 取到13的前一个
//     document.write(res);


//    var res = str1.slice(-3,-1);  // 默认从左往右 -1,-3 是从右往左 冲突所以不截取任何内容
//     document.write(res);  //跟substring 效果一样 slice 支负数索引

    //两只黄鹂鸣翠柳
    // two birds are singing on the tree
    // var str2 = 'js is ,so good';
    // var res = str2.split(','); 
    // document.write(res); 
    // join 将 数组->字符串
    // split 将字符串 -> 数组 


    // var res = str1.concat('database and good'); // 新字符拼接到原字符后边
    // document.write(res);

    // var res = str1.indexOf('s',2)
    // document.write(res);
    // var str2 = 'js is so good';
    // var res = str2.lastIndexOf('o',9)
    // document.write(res);

//    var res = str1.includes('yy')
//    document.write(res);
    //    var res = str1.startsWith('js')
    //    document.write(res);


    //    var res = str1.endsWith('good')
    //    document.write(res);


    // var str2 = '    js is so good   '; //去除两边的空格
    // var res = str2.trim();
    // document.write(res.concat('!'));


    // var str2 = '    js is so good   ';
    // var res = str2.trimLeft();
    // document.write(res.concat('!'),'<br />');


    // var str2 = '    js is so good   ';
    // var res = str2.trimEnd();
    // document.write('haha'+res.concat('!'));


    // typescript 

    // var res  = str1.replace('js','typescript')
    // document.write(res);
    // document.write(str1);
 // 字符串反转 



 var str1  = 'abcdefghijklmnopqrstuvwxyz';

// 思路1 :挨个字符取出来　重组　
// var res = '';
// for(var i=str1.length-1;i>=0;i--){
//     res+=str1[i];
// }
// alert(res)

// var res = '';
// for(var i=0;i<str1.length;i++){
//     res = str1[i]+res;
// }
// alert(res)

//split()
//reverse()
//join()

// var res = str1.split('').reverse().join('')
// alert(res)

 // 替换敏感词

//  var str1 = 'adfasbdfdsbfsbdf'   // sb -> **
// // replace()
// // var res = str1.replace('sb','**')
// // alert(res);
// // 循环 
// // includes
// // var kw = 'sb'
// // while(str1.includes(kw)){
// //     str1 = str1.replace(kw,'**')
// // }
// // console.log(str1)
// var res = str1.split('sb').join('**')
// console.log(res)
 //黄 赌 毒 枪支 弹药   *** 
var str1 = 'qw黄ert赌yuiopas毒dfghjzxcvbn枪支msdfg弹药hxcvbn';
var allkey = ['黄','赌','毒','枪支','弹药'];

// allkey.forEach(function(item){
//     str1 = str1.split(item).join('***')
// })
// alert(str1)

for(var i=0;i<allkey.length;i++){
    while(str1.includes(allkey[i])){
        str1 = str1.replace(allkey[i],'**')
    }
}
alert(str1)



    </script>
</body>
</html>